﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Windows.Input;
using DevExpress.XtraEditors;
using ERP_RORZE_DLL.Product.DAO;
using ERP_RORZE_DLL.Product.database;
using System.Text.RegularExpressions;
using ERP_RORZE_TOOL.DBAccess;

namespace ERP_RORZE_PRODUCT.Product.WTS
{
    public partial class frm_MachineWTSInput : DevExpress.XtraEditors.XtraForm
    {
        //Không dùng form này
        public event EventHandler Reload;
        ClsWTSDAO clsWTSDAO = new ClsWTSDAO();
        ClsMachineWTSTable b = new ClsMachineWTSTable();
        DataTable dtStaff = new DataTable();
        DataTable dtMOno = new DataTable();
        private bool flagLoadDone;
        private bool dropDown;

        DataTable dt;
        string PartID;

        public frm_MachineWTSInput()
        {
            InitializeComponent();
            this.txtTime.LostFocus += txtTime_LostFocus;
            this.cbMONo.LostFocus += cbMONo_LostFocus;
        }


        private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void frm_MachineWTSInput_Load(object sender, EventArgs e)
        {
            dateDate.Value = DateTime.Now.AddDays(-1);
            //list machine
            DataTable dt3;
            dt3 = clsWTSDAO.GetAllMachine();
            DataRow r3 = dt3.NewRow();
            r3["MachineID"] = "";
            dt3.Rows.InsertAt(r3, 0);
            cbMachine.DataSource = dt3;
            cbMachine.DisplayMember = "MachineID";
            cbMachine.ValueMember = "MachineID";

            //list MO Number
            //DataTable dt2;
            dtMOno = clsWTSDAO.GetAllMONo();
            DataRow r1 = dtMOno.NewRow();
            r1["MONo"] = "";
            r1["PartID"] = "";
            r1["FullName"] = "";
            dtMOno.Rows.InsertAt(r1, 0);
            List<ClsMOTable> objs = new List<ClsMOTable>();

            foreach (DataRow r in dtMOno.Rows)
            {
                ClsMOTable obj = new ClsMOTable();
                obj.MONo = r["MONo"].ToString();     ////
                obj.PartID = r["PartID"].ToString();  ////
                obj.FullName = r["FullName"].ToString();
                objs.Add(obj);
            }
            cbMONo.DataSource = objs;
            cbMONo.DisplayMember = "MONo";
            cbMONo.ValueMember = "MONo";



            //list staff
            //DataTable dt4;
            dtStaff = clsWTSDAO.GetAllStaff();
            DataRow r4 = dtStaff.NewRow();
            r4["FullName"] = "";
            r4["StaffID"] = "";
            dtStaff.Rows.InsertAt(r4, 0);
            cbStaff.DataSource = dtStaff;
            cbStaff.DisplayMember = "StaffID";
            cbStaff.ValueMember = "StaffID";

            //list work
            DataTable dt1 = new DataTable();
            dt1 = clsWTSDAO.GetAllWorkMWTS();
            DataRow r2 = dt1.NewRow();
            r2["WorkID"] = "";
            dt1.Rows.InsertAt(r2, 0);
            cbWorkID.DataSource = dt1;
            cbWorkID.DisplayMember = "WorkID";
            cbWorkID.ValueMember = "WorkID";

            //dateDate.Value = DateTime.Now - 1;
            flagLoadDone = true;

        }

        void cbMONo_LostFocus(object sender, EventArgs e)
        {

            DataRow[] row = dtMOno.Select("MONo ='" + cbMONo.Text + "'");
            if (row.Length < 1)
            {
                DataTable dtBusOrder = BaseDAO.ExecuteQuery("Select * from [242_BusOder] where MONo='" + cbMONo.Text + "'");
                if (dtBusOrder.Rows.Count > 0 && (bool)dtBusOrder.Rows[0]["Started"] == false)
                {
                    MessageBox.Show("Đơn hàng này chưa start.");
                    cbStaff.Focus();
                }
                else
                {
                    MessageBox.Show("Không có đơn hàng này.");
                    cbStaff.Focus();
                }
                lblMono.Text = string.Empty;
                return;

            }

        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            if (txtTime.Text == "")
            {
                MessageBox.Show("Chưa nhập Time");

            }
            else if (int.Parse(txtTime.Text) <= 0)
            {
                MessageBox.Show("Time phải lớn hơn 0");
            }
            else if (cbWorkID.Text == "")
            {
                MessageBox.Show("Chưa chọn mã công việc");
            }
            else if (cbMONo.Text == "")
            {
                MessageBox.Show("Chưa chọn MONo");
            }
            else if (cbMachine.Text == "")
            {
                MessageBox.Show("Chưa chọn Machine");
            }
            else if (cbOption.Text == "")
            {
                MessageBox.Show("Chưa chọn Option");
            }
            else if (cbStaff.Text == "")
            {
                MessageBox.Show("Chưa chọn Staff");
            }
            else if (cbWorkID.Text == "")
            {
                MessageBox.Show("Chưa chọn Work");
            }
            else if (cbShift.Text == "")
            {
                MessageBox.Show("chưa nhập Shift");
            }
            else
            {
                try
                {
                    if (txtClampTime.Text == "")
                    {
                        txtClampTime.Text = "0";
                    }

                    if (txtProTime.Text == "")
                    {
                        txtProTime.Text = "0";
                    }
                    dt = clsWTSDAO.GetAllOptionIDByMONo(cbMONo.SelectedValue.ToString(), cbOption.SelectedValue.ToString());
                    int i = 0;
                    foreach (DataRow r in dt.Rows)
                    {
                        i++;
                    }
                    if (i == 0)
                    {
                        MessageBox.Show("Nguyên công này không có dữ liệu trong MOOption");
                    }
                    else if (IsNumber(txtClampTime.Text) == false)
                    {
                        MessageBox.Show("Clamtime phải là kiểu số");
                    }
                    else if (IsNumber(txtNGQty.Text) == false)
                    {
                        MessageBox.Show("NGQty phải là kiểu số");
                    }
                    else if (IsNumber(txtOKQty.Text) == false)
                    {
                        MessageBox.Show("OKQty phải là kiểu số");
                    }
                    else if (IsNumber(txtProTime.Text) == false)
                    {
                        MessageBox.Show("Protime phải là kiểu số");
                    }
                    else if (IsNumber(txtTime.Text) == false)
                    {
                        MessageBox.Show("Time phải là kiểu số");
                    }
                    else
                    {
                        int OK = 0;
                        int NG = 0;
                        // số lương OK và NG của nguyên công này  OK: 1, NG :2
                        dt = clsWTSDAO.GetAllVMachineOPTStatusByMONo(cbMONo.SelectedValue.ToString(), cbOption.Text);
                        foreach (DataRow r in dt.Rows)
                        {
                            OK = OK + int.Parse(r["MachineOKQty"].ToString());
                            NG = NG + int.Parse(r["MachineNGQty"].ToString());
                        }

                        int MachineNG = 0;
                        // so luong NG phat sinh ngoai may cho den thoi diem gia cong nguyen cong nay- Chi so 2+5
                        dt = clsWTSDAO.GetAllVMONGByMONo(cbMONo.SelectedValue.ToString());
                        foreach (DataRow r in dt.Rows)
                        {
                            MachineNG = MachineNG + int.Parse(r["SumofNG"].ToString());
                        }

                        int PreOptionOK = 0;
                        //'Tinh so luong san pham OK cua nguyen cong truoc do-chi so 4
                        dt = clsWTSDAO.GetAllVWTSCheckByMONo(cbMONo.SelectedValue.ToString(), cbOption.Text);
                        foreach (DataRow r in dt.Rows)
                        {
                            PreOptionOK = PreOptionOK + int.Parse(r["MachineOKQty"].ToString());
                        }

                        int intMoQty = 0;
                        //chỉ số 3
                        dt = clsWTSDAO.GetAllMOByMONo(cbMONo.SelectedValue.ToString());
                        foreach (DataRow r in dt.Rows)
                        {
                            intMoQty = intMoQty + int.Parse(r["MOQty"].ToString());
                        }
                        if (NG + OK + int.Parse(txtOKQty.Text) + int.Parse(txtNGQty.Text) > PreOptionOK && cbOption.Text.Substring(3, 2) != "01" && int.Parse(txtNGQty.Text) + int.Parse(txtOKQty.Text) > 0)
                        {
                            MessageBox.Show("Số lượng ok của nguyên công này là: " + OK + ", số lượng NG đã nhập của nguyên công này là: " + NG + ", NG trên form là: " + txtNGQty.Text + ", OK trên form là: " + txtOKQty.Text + ", Số lượng OK của nguyên công trước là: " + PreOptionOK);
                        }
                        else if (OK + MachineNG + int.Parse(txtOKQty.Text) + int.Parse(txtNGQty.Text) > intMoQty && int.Parse(txtNGQty.Text) + int.Parse(txtOKQty.Text) > 0)
                        {
                            MessageBox.Show("Số lượng ok của nguyên công này là: " + OK + ", số lượng NG đến thời điểm này: " + MachineNG + ", NG trên form là: " + txtNGQty.Text + ", OK trên form là: " + txtOKQty.Text + ", Số lượng lệnh chỉ là: " + intMoQty);
                        }
                        else if (label13.Text.Substring(0, 3) == "Jig" && txtNote1.Text == "")
                        {
                            MessageBox.Show("Đây là lệnh gia công đồ gá. Pải nhập tên và số lượng đồ gá");
                        }
                        else if (label13.Text.Substring(0, 3) == "Jig" && cbWorkID.Text.Substring(0, 2) == "FB")
                        {
                            MessageBox.Show("Đây là lệnh gia công đồ gá. Mã công việc không được là FB##");
                        }
                        else if (label13.Text.Substring(0, 3) == "Jig" && cbWorkID.Text.Substring(0, 2) == "PL")
                        {
                            MessageBox.Show("Đây là lệnh gia công đồ gá. Mã công việc không được là PL##");
                        }
                        else if (label13.Text.Substring(0, 3) == "Jig" && cbWorkID.Text.Substring(0, 2) == "PM")
                        {
                            MessageBox.Show("Đây là lệnh gia công đồ gá. Mã công việc không được là PM##");
                        }
                        else if (cbMONo.SelectedValue.ToString().Substring(0, 1) == "S" && cbWorkID.Text.Substring(0, 2) == "PB")
                        {
                            MessageBox.Show("Đây là lệnh gia công hàng mẫu. Mã công việc không được là PB##");
                        }
                        else if (cbMONo.SelectedValue.ToString().Substring(0, 1) == "S" && cbWorkID.Text.Substring(0, 2) == "PL")
                        {
                            MessageBox.Show("Đây là lệnh gia công hàng mẫu. Mã công việc không được là PL##");
                        }
                        else if (cbMONo.SelectedValue.ToString().Substring(0, 1) == "S" && cbWorkID.Text.Substring(0, 2) == "PKJ")
                        {
                            MessageBox.Show("Đây là lệnh gia công hàng mẫu. Mã công việc không được là PKJ#");
                        }
                        //Kiem tra Neu la cong viec truc tiep thi khong duoc nhap vao lenh G
                        else if (checkMGT.Checked == false && cbMONo.SelectedValue.ToString().Substring(0, 1) == "G")
                        {
                            MessageBox.Show("Mã công việc trực tiếp không được nhập vào lệnh G");
                        }
                        //Kiem tra Neu la cong viec gián tiep thi phải nhap vao lenh G
                        else if (checkMGT.Checked == true && cbMONo.SelectedValue.ToString().Substring(0, 1) != "G")
                        {
                            MessageBox.Show("Mã công việc gián tiếp phải nhập vào lệnh G");
                        }
                        else
                        {
                            if (OK + MachineNG + int.Parse(txtOKQty.Text) + int.Parse(txtNGQty.Text) == intMoQty)
                            {
                                ClsMOOptionTable bb = new ClsMOOptionTable();
                                bb.OptionID = cbOption.Text;
                                bb.MONo = cbMONo.SelectedValue.ToString();
                                bb.Finishdate = dateDate.Value;
                                bb.Shift = cbShift.Text;
                                bb.FinishMachine = cbMachine.Text;
                                clsWTSDAO.UpdateMOOption(bb);
                                MessageBox.Show("Đã update vào MOOption");
                            }

                            //MessageBox.Show("" + OK + "," + NG + "," + MachineNG + "," + PreOptionOK + "," + intMoQty);
                            //bắt đầu nhập

                            b.Date = dateDate.Value;
                            b.ClampTime = float.Parse(txtClampTime.Text);
                            b.MachineID = cbMachine.Text;
                            b.MONo = cbMONo.SelectedValue.ToString();
                            b.NGQty = int.Parse(txtNGQty.Text);
                            b.Note1 = txtNote1.Text;
                            b.Note2 = txtNote2.Text;
                            b.OKQty = int.Parse(txtOKQty.Text);
                            b.OptionID = cbOption.Text;
                            b.ProTime = float.Parse(txtProTime.Text);
                            b.Shift = cbShift.Text;
                            b.StaffID = cbStaff.SelectedValue.ToString();
                            b.Time = float.Parse(txtTime.Text);
                            b.WorkID = cbWorkID.SelectedValue.ToString();
                            clsWTSDAO.InsertMachineWTS(b);
                            //MessageBox.Show("Đã nhập xong");

                            cbWorkID.Text = "";
                            txtClampTime.Text = "0";
                            txtNote1.Text = "";
                            txtNGQty.Text = "0";
                            txtNote2.Text = "";
                            txtOKQty.Text = "0";
                            txtProTime.Text = "0";
                            txtTime.Text = "";
                            txtTotal.Text = "";
                            txtInputed.Text = "";
                            cbWorkID.Focus();
                            //Reload(sender, e);

                        }
                    }
                }
                catch
                {
                    MessageBox.Show("NGQty, OKQty,Time là kiểu số nguyên và ProTime, ClampTime phải là kiểu số thực. Nếu không có thì hãy để bằng 0");
                }
            }

        }

        void txtTime_LostFocus(object sender, EventArgs e)
        {
            if (dateDate.Value.ToString() == "")
            {
                MessageBox.Show("Phải nhập Ngày tháng trước");
                txtTime.Text = "";
            }
            else if (cbMachine.Text == "")
            {
                MessageBox.Show("Phải nhập Machine trước trước");
                txtTime.Text = "";
            }
            else if (cbShift.Text == "")
            {
                MessageBox.Show("Phải chọn Shift trước");
                txtTime.Text = "";
            }
            else
            {
                try
                {
                    dt = clsWTSDAO.GetAllInputTime(cbMachine.Text, dateDate.Value.Day, dateDate.Value.Month, dateDate.Value.Year, cbShift.Text);
                    int Inputted = 0;
                    int Total;
                    //Inputted = int.Parse(dt.Rows[0]["TimeOfSum"].ToString());
                    foreach (DataRow r in dt.Rows)
                    {
                        Inputted = Inputted + int.Parse(r["TimeOfSum"].ToString());
                    }
                    Total = Inputted + int.Parse(txtTime.Text);
                    txtTotal.Text = "" + Total;
                    txtInputed.Text = "" + Inputted;
                }
                catch { }
            }
        }

        private void cbMONo_SelectedIndexChanged(object sender, EventArgs e)
        {

            //ClsMOTable obj = ((ClsMOTable)cbMONo.SelectedItem);
            //label13.Text = obj.PartID.ToString();
            //MessageBox.Show(label13.Text.Substring(1, 1));
            //list  OptionID

            if (flagLoadDone)
            {
                ClsMOTable obj = ((ClsMOTable)cbMONo.SelectedItem);
                label13.Text = obj.PartID.ToString();

                //dt = clsWTSDAO.GetAllOptionID(cbMONo.SelectedValue.ToString());
                dt =
                    BaseDAO.ExecuteQuery("select [242_MOOption].OptionID from [242_MOOption] where [242_MOOption].MONo = '" +
                                         cbMONo.SelectedValue.ToString() + "'  and [242_MOOption].OptionID like 'stg%' GROUP BY OptionID");
                cbOption.DataSource = dt;
                cbOption.DisplayMember = "OptionID";
                cbOption.ValueMember = "OptionID";

                DataRow[] row = dtMOno.Select("MONo ='" + cbMONo.SelectedValue.ToString() + "'");
                lblMono.Text = row[0]["PartID"].ToString();

            }
        }

        private void txtTime_KeyPress(object sender, KeyPressEventArgs e)
        {
            //if (e.KeyChar == 13)
            //{
            //    if (dateDate.Value.ToString() == "")
            //    {
            //        MessageBox.Show("Phải nhập Ngày tháng trước");
            //        txtTime.Text = "";
            //    }
            //    else if (cbMachine.Text == "")
            //    {
            //        MessageBox.Show("Phải nhập Machine trước trước");
            //        txtTime.Text = "";
            //    }
            //    else if (cbShift.Text == "")
            //    {
            //        MessageBox.Show("Phải chọn Shift trước");
            //        txtTime.Text = "";
            //    }
            //    else
            //    {
            //        try
            //        {
            //            dt = clsWTSDAO.GetAllInputTime(cbMachine.Text, dateDate.Value.Day, dateDate.Value.Month, dateDate.Value.Year, cbShift.Text);
            //            int Inputted = 0;
            //            int Total;
            //            //Inputted = int.Parse(dt.Rows[0]["TimeOfSum"].ToString());
            //            foreach (DataRow r in dt.Rows)
            //            {
            //                Inputted = Inputted + int.Parse(r["TimeOfSum"].ToString());
            //            }
            //            Total = Inputted + int.Parse(txtTime.Text);
            //            txtTotal.Text = "" + Total;
            //            txtInputed.Text = "" + Inputted;
            //        }
            //        catch { }
            //    }
            //}
        }
        
        private void cbMONo_SelectedValueChanged(object sender, EventArgs e)
        {
            //dt = clsWTSDAO.GetAllOptionID(cbMONo.SelectedValue.ToString());
            //cbOption.DataSource = dt;
            //cbOption.DisplayMember = "OptionID";
            //cbOption.ValueMember = "OptionID";
        }

        private void cbWorkID_SelectedValueChanged(object sender, EventArgs e)
        {
            if (cbWorkID.SelectedValue.ToString() == "PSN1")
            {
                checkMGT.Checked = true;
            }
            else if (cbWorkID.SelectedValue.ToString() == "PRN1")
            {
                checkMGT.Checked = true;
            }
            else if (cbWorkID.SelectedValue.ToString() == "PON1")
            {
                checkMGT.Checked = true;
            }
            else if (cbWorkID.SelectedValue.ToString() == "PZM1")
            {
                checkMGT.Checked = true;
            }
            else if (cbWorkID.SelectedValue.ToString() == "P1Z1")
            {
                checkMGT.Checked = true;
            }
            else if (cbWorkID.SelectedValue.ToString() == "PDZ1")
            {
                checkMGT.Checked = true;
            }
            else if (cbWorkID.SelectedValue.ToString() == "PFN1")
            {
                checkMGT.Checked = true;
            }
            else
            {
                checkMGT.Checked = false;
            }
        }

        public bool IsNumber(string pText)
        {
            Regex regex = new Regex(@"^[-+]?[0-9]*\.?[0-9]+$");
            return regex.IsMatch(pText);
        }

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            // Add controls for which Arrow keys => focus is not required.
            if ((!dropDown && (ActiveControl is TextBox || ActiveControl is System.Windows.Forms.ComboBox || ActiveControl is System.Windows.Forms.DateTimePicker)))
            {
                switch (keyData)
                {
                    case Keys.Up:
                        //case Keys.Down:

                        //bool forward = (keyData == Keys.Down);
                        if (this.ProcessTabKey(false))
                        {
                            return true;
                        }

                        break;
                }
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }

        protected override bool ProcessKeyPreview(ref Message m)
        {
            if (m.Msg == 0x0100 && (int)m.WParam == 13)
            {
                this.ProcessTabKey(true);
            }
            return base.ProcessKeyPreview(ref m);
        }


        private void cbStaff_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (flagLoadDone)
            {
                try
                {
                    DataRow[] row = dtStaff.Select("StaffID ='" + cbStaff.SelectedValue.ToString() + "'");
                    lblStaff.Text = row[0]["StaffName"].ToString();
                }
                catch (Exception)
                {
                    lblStaff.Text = string.Empty;
                }

            }
        }

        private void txtNote2_Enter(object sender, EventArgs e)
        {
            ((TextBox)sender).SelectAll();
        }

        private void txtProTime_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            ((TextBox)sender).SelectAll();
        }

        private void lblMono_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            ((TextBox)sender).SelectAll();
        }

        private void frm_MachineWTSInput_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            if (e.Alt)
            {
                if (e.KeyCode == Keys.D)
                {
                    this.btnAdd.PerformClick();
                }
                else if (e.KeyCode == Keys.Down)
                {
                    //return;
                }
            }
            else if (e.KeyCode == Keys.End)
            {
                btnAdd.Focus();
            }
            else if (e.KeyCode == Keys.Home)
            {
                dateDate.Focus();
            }
            //else if (e.KeyCode == Keys.Enter)
            //{
            //    //this.ProcessTabKey(true);
            //    SendKeys.Send("{TAB}");
            //}
            //else
            //{
            //    if (e.KeyData == System.Windows.Forms.Keys.Enter)
            //    {
            //        SendKeys.Send("{TAB}");
            //    }
            //}
            //else if (e.KeyCode == Keys.Enter)
            //{
            //    SendKeys.Send("{TAB}");
            //    e.Handled = true;
            //}

            //Control nextControl;
            //if (e.KeyCode == Keys.Enter)
            //{
            //    nextControl = GetNextControl(ActiveControl, !e.Shift);
            //    if (nextControl == null)
            //        nextControl = GetNextControl(null, true);
            //    nextControl.Focus();
            //    e.SuppressKeyPress = true;
            //} 
        }

        private void cbShift_DropDown(object sender, EventArgs e)
        {
            dropDown = true;
        }

        private void cbShift_DropDownClosed(object sender, EventArgs e)
        {
            dropDown = false;
        }

        private void lblMono_MouseDown_1(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            ((TextBox)sender).SelectAll();
        }

    }

}